このページは、2008 年 04 月 07 日に最後に変更されました。

edocs ホーム > BEA AquaLogic Data Services Platform 3.0/3.2 ドキュメント > ALDSP 3.2 新機能のドキュメント

ミューテータ関数

このトピックでは、ALDSP 3.2 に利用できる組み込みのミューテータ関数について説明します。

ALDSP は、(XDM) のインスタンスおよびインスタンスの変更に関する情報を表すのに、拡張された XQuery データ モデル (XXDM)、XQuery データ モデル (XDM) の拡張子を使用します。

fn-bea:changed-element

fn-bea:changed-element() 関数は、変更されていない changed-element に要素を促進することができます。その後、組み込みのミューテータ関数を使用して、結果の changed-element を変更することができます。

fn-bea:changed-element() 関数には以下のシグネチャがあります。

fn-bea:changed-element($e as element()) as changed-element()

例 

以下の呼び出しでは、$cc を $c で表現された要素にタイプ customer の変更されていない changed-element として宣言します。 

declare $cc as changed-element(customer) := fn-bea:changed-element($c);

fn-bea:insert-into

fn-bea:insert-into() 関数では、指定された XPath 場所の XXDM インスタンスにノードを挿入できます。

fn-bea:insert-into() 関数には以下のシグネチャがあります。

fn-bea:insert-into($ce as changed-element(),
                   $path as xs:string,
                   $value as node()) as changed-element()

説明は次のとおりです。

  • $ce は、変更する XXDM インスタンスです。
  • $path は、SDO XPath フラグメントを使用することで $ce にパスを指定します。
  • $value は、挿入するノードを含めます。

例 

変数 $cc にバインドされている以下の値を含む変換されている customer を考慮します。

<customer ssn="XXX-XX-XXX">
   <name>
      <first>Thomas</first>
      <last>Smith</last>
   </name>
   <address>...</address>
   <address>...</address>
   <orders>
      <order>...</order>
      <order>...</order>
   <orders>
<customer>

例 - 新しい要素の挿入

 次の呼び出しを考慮します。

set $cc := fn-bea:insert-into($cc, "name", <middle>Paul</middle>);

Customer のスキーマでは、ミドルネーム (middle) の要素を name の子要素として要素の first と last の間に入力できることを前提とすれば、呼び出しによって (middle) 要素が次のように挿入されます。

<customer ssn="XXX-XX-XXX">
   <name>
      <first>Thomas</first>
      <middle>Paul</middle>
      <last>Smith</last>
   </name>
...
<customer>

例 - 追加要素の挿入 

次の呼び出しを考慮します。

set $cc := fn-bea:insert-into($cc, ".", <address>...<city>York</city></address>);

呼び出しは、追加のアドレス要素を customer 要素に以下のとおり挿入します。

<customer ssn="XXX-XX-XXX">
   <name>...</name>
   <address>...</address>
   <address>...<city>York</city></address>
   <address>...</address>
   <orders>...</orders>
<customer>

例 - 属性の挿入

次の呼び出しを考慮します。

set $cc := fn-bea:insert-into($cc, "orders/order[2]", attribute paid { fn:true() });

呼び出しは、以下に示しているように、paid 属性を 2 番目の位置に挿入します。

<customer ssn="XXX-XX-XXX">
   ...
   <orders>
      <order>...</order>
      <order paid="true">...</order>
   <orders>
<customer>

fn-bea:delete

fn-bea:delete() 関数では、XXDM インスタンスで指定された XPath 場所のノードを削除できます。関数は指定された子孫を含めないインスタンスのコピーを返します。

fn-bea:delete() 関数には以下の署名があります。

fn-bea:delete($ce as changed-element(),
              $path as xs:string) as changed-element()

説明は次のとおりです。

  • $ce は、変更する XXDM インスタンスです。
  • $path は、SDO XPath フラグメントを使用して削除する $ce の子孫ノードへのユニークなパスを指定します。

例 

変数 $cust が以前の例に示された値にバインドされると仮定します。

例 - 要素の削除

次の呼び出しを考慮します。

set $cc := fn-bea:delete($cc, "address[2]");

呼び出しによって、$cust のアドレスの 2 番目の子要素が削除され、以下に示す値になります。

<customer ssn="XXX-XX-XXX">
   <name>...</name>
   <address>...</address>
   <orders>...<orders>
<customer>

例 - 属性の削除

次の呼び出しを考慮します。

set $cc := fn-bea:delete($cc, "@ssn");

呼び出しによって $cust の ssn 属性が削除され、以下に示す値になります。

<customer>
<name>...</name>
<address>...</address>
<address>...</address>
<orders>...<orders>
<customer>

fn-bea:replace-value

fn-bea:replace-value() 関数では、指定された XPath 場所の XXDM インスタンスのノードの値を置き換えることができます。関数は、置き換えられた値を含むインスタンスのコピーを返します。

fn-bea:replace-value() 関数には以下の署名があります。

fn-bea:replace-value($ce as changed-element(),
                     $path as xs:string,
                     $value as xdt:anyAtomicType*) as changed-element()

説明は次のとおりです。

  • $ce は、変更する XXDM インスタンスです。
  • $path は、SDO XPath フラグメントを使用することで変更する $ce の子孫ノードへのユニークなパスを指定します。
  • $value は、ターゲット ノードの値を置き換えることになっている値を含めます。
    ターゲット ノードには単純なコンテンツがない場合、この関数でエラーが発生します。

例 

変数 $cc が以前の例に示された値にバインドされると仮定します。

例 - 要素のコンテンツの置き換え

次の呼び出しを考慮します。

set $cc := fn-bea:replace-value($cc, "name/last", "Jones");

呼び出しは、以下に示すように名前の最後の子の内容を Smith から Jones に変更します。

<customer ssn="XXX-XX-XXX">
<name>
   <first>Thomas</first>
   <last>Jones</last>
</name>
...
<customer>

例 - 属性値の置き換え

次の呼び出しを考慮します。

set $cc := fn-bea:replace-value($cc, "@ssn", "YYY-YY-YYYY");

呼び出しは、以下に示すように ssn 属性の内容を XXX-XX-XXX から YYY-YY-YYYY に変更します。

<customer ssn="YYY-YY-YYYY">
<name>...</name>
<address>...</address>
<address>...</address>
<orders>...<orders>
<customer>

例 - 要素のコンテンツの削除

次の呼び出しを考慮します。

set $cc := fn-bea:replace-value($cc, "name/first", ());

呼び出しは、以下に示すように name の first 子要素の内容を削除します。

<customer ssn="XXX-XX-XXX">
<name>
   <first/>
   <last>Smith</last>
</name>
...
<customer>

first 要素が空である場合、結果は以下に示すように空になります。

<customer ssn="XXX-XX-XXX">
<name>
   <first xsi:nil="true"/>
   <last>Smith</last>
</name>
...
<customer>

関連項目

コンセプト
ガイド
参考
2008 年 04 月 10 日に 11:47 に Confluence によって作成されたドキュメント